package main

import (
	"errors"
	"fmt"
)

var InsufficientFundsError = errors.New("cannot withdraw, insufficient funds")

/* [req] 使用类型别名。int 类型作为比特币钱包不具备描述性 */
type Bitcoin int

/* [req] 自定义打印输出格式，String()是print包下的Stringer接口中的方法，实现改方法则可完成自定义格式需求 */
func (b Bitcoin) String() string {
	return fmt.Sprintf("%d BTC", b)
}

type Wallet struct {
	balance Bitcoin
}

/* [req_add] 存钱 */
func (w *Wallet) Deposit(amount Bitcoin) {
	w.balance += amount
}

/* [req_del] 取钱 */
func (w *Wallet) Withdraw(amount Bitcoin) error {
	if amount > w.balance {
		return InsufficientFundsError
	}
	w.balance -= amount
	//未出现异常时，值可以是任意类型
	return nil
}

func (w *Wallet) Balance() Bitcoin {
	return w.balance
}
